在已有的硬件平台上根据原理图增加参数配置:
eMMC直接焊接在核心板上,接在PS侧的SD1上。开发板上将TF卡接入到了PS侧的SD0上。
原理图:
配置界面:注意TF卡对应SD0使用到了Card Detect引脚,对应的是MIO9。
综合并实现后导出新.xsa文件
在vitis里面平台工程更新一下:右击创建的平台工程,点击Update Hardware Specification:选择.xsa文件路径,出现以下弹框,点击OK,说明更新成功。
因为应用工程需要用到文件系统,所以需要修改BSP,添加文件系统相关的包(xilffs):
重新build平台工程。
接下来创建新的空的.c应用工程,添加.c文件。
添加相应的代码。
应用工程的代码支持测试TF卡和eMMC。
测试代码如下:
x
const char *sd_path[] = {"0:/", "1:/"};const char *file_name[] = {"0:/test.txt", "1:/test.txt"};
const char src_str[30] = "this is a test string!";
//Initialize file systemint platform_init_fs(uint8_t sd_id){ FRESULT status;
BYTE work[FF_MAX_SS];
status = f_mount (&fatfs, sd_path[sd_id], 1 ); if (status != FR_OK) { xil_printf("Volume is not FAT formated; formating FAT\r\n");
status = f_mkfs(sd_path[sd_id], FM_FAT32, 0, work, sizeof work); if (status != FR_OK) { xil_printf("Unable to format FATfs\r\n"); return -1; }
status = f_mount(&fatfs, SD_PATH, 1); if (status != FR_OK) { xil_printf("Unable to mount FATfs\r\n" ); return -1; } } return 0;}
//Mount SD (TF) cardint sd_mount(uint8_t sd_id){ FRESULT status;
status = platform_init_fs(sd_id); if (status) { xil_printf("ERROR: f_mount returned %d!\n", status); return XST_FAILURE; } return XST_SUCCESS;}
//SD card write dataint sd_write_data(char *file_name, u32 src_addr, u32 byte_len){ FIL fil; UINT bw;
f_open(&fil, file_name, FA_CREATE_ALWAYS | FA_WRITE); f_lseek(&fil, 0); f_write(&fil, (void *)src_addr, byte_len, &bw); f_close(&fil); return 0;}
//SD card Read dataint sd_read_data(char *file_name, u32 src_addr, u32 byte_len){ FIL fil; UINT br;
f_open(&fil, file_name, FA_READ); f_lseek(&fil, 0); f_read(&fil, (void *)src_addr, byte_len, &br); f_close(&fil); return 0;}
void sd_emmc_test(uint8_t sd_id){ int status, len; char dest_str[30] = "";
status = sd_mount(sd_id); if(status != XST_SUCCESS ) { xil_printf("Failed to open SD card!\r\n" ); return 0; } else xil_printf("Success to open SD card!\r\n");
len = strlen(src_str ); sd_write_data(file_name[sd_id],(u32)src_str, len ); sd_read_data(file_name[sd_id],(u32)dest_str, len );
if (strcmp(src_str, dest_str) == 0) { xil_printf("src_str is equal to dest_str, SD card test success!\r\n"); } else { xil_printf("src_str is not equal to dest_str, SD card test failed!\r\n"); }}
按照IIC文档的编译调试步骤即可。
在测试TF卡前,先插入TF卡。
将JTAG USB线、PS UART线连接后,给开发板供电。
在vitis上进入调试模式,下载程序并执行。调试结果: